﻿using CREAPA.Repositorio;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CREAPA.Dominio.contrato;
using CREAPA.Dominio;


namespace CREAPA.RepositorioADO
{
    public class GrupoProblemaOsRepositorioADO
    {
        private Contexto contexto;

        private void Inserir(GrupoProblemaOs grupoProblema)
        {
            var strQuery = "";
            strQuery += " INSERT INTO GrupoProblema (Descricao)";
            strQuery += string.Format(" values ('{0}')", grupoProblema.Descricao);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }
        private void Alterar(GrupoProblemaOs grupoProblema)
        {
            var strQuery = "";
            strQuery += "UPDATE GrupoProblema SET ";
            strQuery += string.Format(" Descricao='{0}' ", grupoProblema.Descricao);
            strQuery += string.Format(" WHERE Id={0} ", grupoProblema.Id);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }

        public void Salvar(GrupoProblemaOs grupoProblema)
        {
            if (grupoProblema.Id > 0)
            {
                Alterar(grupoProblema);
            }
            else
            {
                Inserir(grupoProblema);
            }
        }
        
       public void Excluir(int id)
       {
           using (contexto = new Contexto())
           {
               var strQuery = string.Format(" DELETE FROM GrupoProblema WHERE Id = {0}", id);
               contexto.ExecutaComando(strQuery);
           }
       }
         
        public GrupoProblemaOs ListarPorId(int Id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" SELECT * FROM GrupoProblema WHERE Id = {0}", Id);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader).FirstOrDefault();
            }
        }

        public IEnumerable<GrupoProblemaOs> ListarGrupoProblema()
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" Select * from GrupoProblema order by Descricao");
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }

        private List<GrupoProblemaOs> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
        {

            var grupoProblema = new List<GrupoProblemaOs>();
            while (reader.Read())
            {
                var TemObjeto = new GrupoProblemaOs()
                {
                    Id = int.Parse(reader["Id"].ToString()),
                    Descricao = reader["Descricao"].ToString()
                };
                grupoProblema.Add(TemObjeto);
            }
            reader.Close();
            return grupoProblema;
        }
    }
}
